package com.vhall.component.service.inav;


import com.vhall.component.entity.inav.vo.*;
import com.vhall.component.entity.room.dto.RoomsEntityDTO;
import com.vhall.component.entity.room.vo.ReportGuideShownRequestVO;
import com.vhall.component.plugin.common.support.VssToken;

/**
 * @author lsl
 * @since 2021/6/7 19:35
 */
public interface InavService {

    /**
     * 互动设置设备检测
     *
     * @param param 参数
     * @return tue|false
     */
    Boolean setDevice(SetDeviceReqVO param);

    /**
     * 互动设置上麦接口
     *
     * @param vo    请求参数
     * @param token 用户信息
     * @return 响应结果
     */
    Boolean setHandSup(SetHandSupReqVO vo, VssToken token);

    /**
     * 设置主屏幕
     *
     * @param vo    参数
     * @param token 用户信息
     */
    void setDesktop(SetDesktopReqVO vo, VssToken token);

    /**
     * 获得用户状态
     *
     * @param vo 参数
     * @return 返回值
     */
    UserStatusRspVO getUserStatus(GetUserStatusReqVO vo);

    /**
     * 全体禁言
     *
     * @param vo    请求参数
     * @param token 用户信息
     */
    void setAllBanned(SetAllBannedReqVO vo, VssToken token);

    /**
     * 禁言/取消禁言
     *
     * @param vo    请求参数
     * @param token 用户信息
     * @return 返回参数
     */
    Integer setBanned(SetBannedReqVO vo, VssToken token);

    /**
     * 踢出/取消踢出用户
     *
     * @param vo    请求参数
     * @param token 用户信息
     */
    Boolean setKicked(SetKickedReqVO vo, VssToken token);

    /**
     * 设置设备状态
     *
     * @param vo    参数
     * @param token 用户信息
     * @param room  房间信息
     */
    Boolean setDeviceStatus(SetDeviceStatusReqVO vo, VssToken token, RoomsEntityDTO room);

    /**
     * 设置用户演示状态（主画面）
     *
     * @param vo    请求参数
     * @param token 用户信息
     * @return 返回结果
     */
    Boolean setMainScreen(SetMainScreenReqVO vo, VssToken token);

    /**
     * 上麦
     *
     * @param reqVO 参数
     * @param token 用户信息
     */
    void speak(SpeakReqVO reqVO, VssToken token);

    /**
     * 下麦
     *
     * @param reqVO 参数
     * @param token 用户信息
     * @return 返回结果
     */
    Boolean noSpeak(NoSpeakReqVO reqVO, VssToken token);

    /**
     * 指定文档权限, 用于上麦用户演示文档
     *
     * @param reqVO param
     * @param token vss token
     * @return 返回结果
     */
    Boolean setDocPermissionAction(SetDocPermissionReqVO reqVO, VssToken token);

    /**
     * 预下麦
     *
     * @param reqVO     请求参数
     * @param accountId 操作者用户id
     */
    void preBreakSpeak(PreBreakSpeakReqVO reqVO, Integer accountId);

    /**
     * 无法上麦
     *
     * @param reqVO     请求参数
     * @param accountId 无法上麦用户id
     */
    void unableSpeak(UnableSpeakReqVO reqVO, Integer accountId);


    Boolean queueAdd(Integer accountId, Integer ilId);

    /**
     * 获取用户是否弹出关注引导信息
     * @param requestVO
     * @return
     */
    UserGuideInfoResponseVO getUserGuideInfo(UserGuideInfoRequestVO requestVO);

    /**
     * 关注国信的投顾 IP
     * @param vo
     * @return
     */
    Boolean followGuoxinZone(FollowGuoxinZoneRequestVO vo);

    /**
     * 投顾 ip/栏目关注/订阅的引导上报
     * 用于进行房间今天已经弹出了引导弹窗标记
     * @param vo
     * @return
     */
    Boolean reportGuideShown(ReportGuideShownRequestVO vo);
}
